原文:What should every programmer know about web development?
注:原文链接太多,请自行去原文中找引用的文章和工具链接
界面和用户体验
- 当心浏览器不兼容问题,还有不同操作系统上渲染效果。
- 考虑除了主流浏览器,用户还有可能使用哪些设备访问?例如:手机,屏幕阅读器,搜索引擎等。
- 分批部署:如何在不影响用户的情况下部署更新。拥有一个或多个测试或者分批部署环境来实现架构、代码或内容的变更,并且在不打断任何事情的情况下部署。有一个自动化的部署方式,这通常需要一个版本控制系统和自动化构建系统。
- 不要直接给用户显示不友好的错误信息。
- 不要直接显示用户的邮箱地址,这会被发垃圾邮件的人给爬去。
- 给用户产生的链接加上
rel="nofollow"
,防止spam。 - 构建良好的访问频率限制
- 学习如何渐进增强
- 避免表单刷新重复提交
安全
- 去读OWASP文档
- SQL注入
- 不要信任用户输入和随着请求带来的东西(包括cookie和表单隐藏域)
- 使用盐来加密密码,防止彩虹表攻击。使用速度慢的哈希算法,例如bcrypt或scrypt,来存储密码。避免直接使用MD5或者SHA。参考如何安全存储密码
- 不要用你自己异想天开的认证系统。你很容易在一些细微的地方,不容易测试的地方出错,而且你还一直不会发现,直到你被黑了。
- 知道如何处理信用卡
- 在登录页面和任何敏感数据出现的地方使用HTTPS
- XSS
- CSRF
- 打上最新的补丁
- 确保数据库连接是安全的
- 及时获取最新的攻击技术和平台缺陷
- 读 The Google Browser Security Handbook
- 读 The Web Application Hacker's Handbook
性能
- 如果需要,使用缓存。正确理解HTTP缓存。
- 优化图片。不要使用一个20KB的图片做平铺背景。
- 学习gzip,压缩页面大小。
- 合并css和js
- 看看雅虎和其他的前端最佳实践
- 使用CSS Image Sprites
- 繁忙的站点应该考虑跨域名拆分组件
- 静态内容使用CDN和独立域名
- 最小化HTTP请求
- 压缩JS
- 搞个favicon.ico,要不然浏览器会不断请求它,这会浪费你的带宽。
SEO
- 使用浏览器友好的URL,例如,使用
example.com/pages/45-article-title
而不是example.com/index.php?page=45
- 使用#!替换#,搞清楚为什么。
- 不用让链接叫做“点我”,浪费SEO机会。
- 站点地图sitemap.xml
<link rel="canonical" .../>
- Google Webmaster Tools
- Google Analytics
- robots.txt
- 使用
301 Moved Permanently
来重定向www.example.com到example.com,避免google拆分不同站点排名 - 小心恶意爬虫
技术
- 理解HTTP,像GET,POST,sessions,cookies等,知道stateless是什么意思
- 符合W3C规范
- 浏览器是如何处理JavaScript的
- 浏览器是如何加载css,js的,为何要把js放到尾部
- 理解js沙盒,尤其当你要使用iframes的时候
- 记住js会被禁用
- 搞清301和302的区别
- 尽可能的了解你的开发平台
- 使用normalize.css
- 使用js框架
- 别造轮子
- 与上条相对应,别一上来就用了20个第三方库,搞清楚你需要什么
Bug修正
- 20%的时间开发代码,80%的时间维护它
- 搞个良好的错误报告方案
- 让用户可以联系到你
- 文档,还有未来要支持什么
- 频繁备份(还要确保这些备份是可用的),不光要有备份方案,还要有恢复方案
- 日志啊,日志。网站挂了你好能找到问题。
- 日志要捕获处理的异常和没处理的异常,然后分析日志,找出关键问题。